#ifndef __EKOS_USER_IPC_H__
#define __EKOS_USER_IPC_H__

struct ipc_node_t
{
	 bqueue_t conn;
	 bqueue_t send;
	 bqueue_t recv;

	 unsigned char calls[PAGE_SIZE] __attribute__ ((aligned(PAGE_SIZE)));
	 unsigned char rets[PAGE_SIZE]  __attribute__ ((aligned(PAGE_SIZE)));
};

void ipc_init(void);
void ipc_node_init(struct ipc_node_t *node);
void ipc_connect(struct ipc_node_t *node);
void ipc_accept(struct ipc_node_t *node);
void ipc_cli_trans_yield(struct ipc_node_t *node);
void ipc_cli_trans_wait(struct ipc_node_t *node);
void ipc_ser_trans_yield(struct ipc_node_t *node);
void ipc_ser_trans_wait(struct ipc_node_t *node);

#endif
